//OLED.h
#ifndef __OLED_H
#define __OLED_H

	#include <stdint.h>

	#include "OLED_Data.h"

	#define Drive_SH1106
	//#define Using_Video_Memory		//使用显存
	//#define OLED_USE_WIRE			//使用Arduino的硬件IIC


	/*初始化函数*/
	void OLED_Init(void);

	#ifdef Using_Video_Memory
		/*FontSize参数取值*/
		/*此参数值不仅用于判断，而且用于计算横向字符偏移，默认值为字体像素宽度*/
		#define OLED_8X16				8
		#define OLED_6X8				6

		/*IsFilled参数数值*/
		#define OLED_UNFILLED			0
		#define OLED_FILLED				1

		/*更新函数*/
		void OLED_Update(void);
		void OLED_UpdateArea(int16_t X, int16_t Y, uint8_t Width, uint8_t Height);

		/*显存控制函数*/
		void OLED_Clear(void);
		void OLED_ClearArea(int16_t X, int16_t Y, uint8_t Width, uint8_t Height);
		void OLED_Reverse(void);
		void OLED_ReverseArea(int16_t X, int16_t Y, uint8_t Width, uint8_t Height);

		/*显示函数*/
		void OLED_ShowChar(int16_t X, int16_t Y, char Char, uint8_t FontSize);
		void OLED_ShowString(int16_t X, int16_t Y, char *String, uint8_t FontSize);
		void OLED_ShowNum(int16_t X, int16_t Y, uint32_t Number, uint8_t Length, uint8_t FontSize);
		void OLED_ShowSignedNum(int16_t X, int16_t Y, int32_t Number, uint8_t Length, uint8_t FontSize);
		void OLED_ShowHexNum(int16_t X, int16_t Y, uint32_t Number, uint8_t Length, uint8_t FontSize);
		void OLED_ShowBinNum(int16_t X, int16_t Y, uint32_t Number, uint8_t Length, uint8_t FontSize);
		void OLED_ShowFloatNum(int16_t X, int16_t Y, double Number, uint8_t IntLength, uint8_t FraLength, uint8_t FontSize);
		void OLED_ShowChinese(int16_t X, int16_t Y,const char *Chinese);
		void OLED_ShowImage(int16_t X, int16_t Y, uint8_t Width, uint8_t Height, const uint8_t *Image);
		void OLED_Printf(int16_t X, int16_t Y, uint8_t FontSize,const char *format, ...);

		/*绘图函数*/
		void OLED_DrawPoint(int16_t X, int16_t Y);
		uint8_t OLED_GetPoint(int16_t X, int16_t Y);
		void OLED_DrawLine(int16_t X0, int16_t Y0, int16_t X1, int16_t Y1);
		void OLED_DrawRectangle(int16_t X, int16_t Y, uint8_t Width, uint8_t Height, uint8_t IsFilled);
		void OLED_DrawTriangle(int16_t X0, int16_t Y0, int16_t X1, int16_t Y1, int16_t X2, int16_t Y2, uint8_t IsFilled);
		void OLED_DrawCircle(int16_t X, int16_t Y, uint8_t Radius, uint8_t IsFilled);
		void OLED_DrawEllipse(int16_t X, int16_t Y, uint8_t A, uint8_t B, uint8_t IsFilled);
		void OLED_DrawArc(int16_t X, int16_t Y, uint8_t Radius, int16_t StartAngle, int16_t EndAngle, uint8_t IsFilled);
	
	#else
		void OLED_Clear(void);
		void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char);
		void OLED_ShowString(uint8_t Line, uint8_t Column,const char *String);
		void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);
		void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length);
		void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);
		void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);
		void OLED_ShowFloatNum(uint8_t Line, uint8_t Column, double Number, uint8_t IntLength, uint8_t FraLength);
		void OLED_ShowImage(int16_t X, int16_t Page, uint8_t Width, uint8_t Height, const uint8_t *Image);
		void OLED_Printf(uint8_t Line, uint8_t Column,const char *format, ...);
		
	
	#endif


#endif





